<html xmlns="https://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Language" content="zh-CN" />
<link href="../style/css/manual-zip.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
<link href="../style/css/manual-zip-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
<title>mod_expires － Apache 2.2 中文手册 [金步国]</title>
<script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?d286c55b63a3c54a1e43d10d4c203e75"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script>
</head>
<body><div id="page-header">
<p class="menu"><a href="index.html">模块索引</a> | <a href="directives.html">指令索引</a> | <a href="../faq/index.html">常见问题</a> | <a href="../glossary.html">词汇表</a> | <a href="../sitemap.html">站点导航</a></p><p class="apache">Apache HTTP Server 版本2.2</p><img alt="" src="../images/feather.gif" /></div>
<div class="up"><a href="index.html"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
<div id="path"><a href="https://www.apache.org/">Apache</a> &gt; <a href="https://httpd.apache.org/">HTTP Server</a> &gt; <a href="https://httpd.apache.org/docs/">文档</a> &gt; <a href="../index.html">版本2.2</a> &gt; <a href="index.html">模块</a></div>

<div id="translation-info">　　 <a href="../translator_announcement.html#thanks">致谢</a> | 本篇译者：<a href="../../../index.html">金步国</a>(<a href="../../../index.html">作品集</a>) | 本页最后更新：2006年10月20日</div>
<div id="page-content"><div id="preamble"><h1>Apache模块 mod_expires</h1>

<table border="1" cellpadding="0" cellspacing="0" bordercolor="#AAAAAA" class="module">
<tr><th><a href="module-dict.html#Description">说明</a></th><td>允许通过配置文件控制HTTP的"<code>Expires</code>"和"<code>Cache-Control</code>"头内容</td></tr>
<tr><th><a href="module-dict.html#Status">状态</a></th><td>扩展(E)</td></tr>
<tr><th><a href="module-dict.html#ModuleIdentifier">模块名</a></th><td>expires_module</td></tr>
<tr><th><a href="module-dict.html#SourceFile">源文件</a></th><td>mod_expires.c</td></tr>
</table>
<h3>概述</h3>

    <p>这个模块控制服务器应答时的<code>Expires</code>头内容和<code>Cache-Control</code>头的<code>max-age</code>指令。有效期(expiration date)可以设置为相对于源文件的最后修改时刻或者客户端的访问时刻。</p>

    <p>这些HTTP头向客户端表明了文档的有效性和持久性。如果有缓存，文档就可以从缓存(除已经过期)而不是从服务器读取。接着，客户端考察缓存中的副本，看看是否过期或者失效，以决定是否必须从服务器获得更新。</p>

    <p>要修改<code>Cache-Control</code>头中<code>max-age</code>(参见<a href="https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9">RFC 2616 section 14.9</a>)项之外的内容，你还可以使用<code class="directive"><a href="mod_headers.html#header">Header</a></code>指令。</p>

</div>
<div class="top"><a href="mod_expires.html#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="AltSyn" id="AltSyn">Alternate(交替/轮流) Interval(间隔) Syntax(语法)</a></h2>
    <p><code class="directive"><a href="mod_expires.html#expiresdefault">ExpiresDefault</a></code>和<code class="directive"><a href="mod_expires.html#expiresbytype">ExpiresByType</a></code>指令同样能够用易懂的语法格式进行定义：</p>

    <div class="example"><p><code>
      ExpiresDefault "&lt;base&gt; [plus] {&lt;num&gt;
      &lt;type&gt;}*"<br />
      ExpiresByType type/encoding "&lt;base&gt; [plus]
      {&lt;num&gt; &lt;type&gt;}*"
    </code></p></div>

    <p>其中&lt;base&gt;是下列之一：</p>

    <ul>
      <li><code>access</code></li>

      <li><code>now</code> (等价于'<code>access</code>')</li>

      <li><code>modification</code></li>
    </ul>

    <p><code>plus</code>关键字是可选的。&lt;num&gt;必须是整数[可以被<code>atoi()</code>接受的]，&lt;type&gt;是下列之一：</p>

    <ul>
      <li><code>years</code></li>
      <li><code>months</code></li>
      <li><code>weeks</code></li>
      <li><code>days</code></li>
      <li><code>hours</code></li>
      <li><code>minutes</code></li>
      <li><code>seconds</code></li>
    </ul>

    <p>例如，下列3个指令都表示文档默认的有效期是一个月：</p>

    <div class="example"><p><code>
      ExpiresDefault "access plus 1 month"<br />
      ExpiresDefault "access plus 4 weeks"<br />
      ExpiresDefault "access plus 30 days"
    </code></p></div>

    <p>有效期可以通过增加"&lt;num&gt; &lt;type&gt;"子句进一步调整：</p>

    <div class="example"><p><code>
      ExpiresByType text/html "access plus 1 month 15
      days 2 hours"<br />
      ExpiresByType image/gif "modification plus 5 hours 3
      minutes"
    </code></p></div>

    <p>注意，如果你使用基于最后修改日期的设置，"Expires:"头将<strong>不会</strong>被添加到那些并非来自于磁盘文件的内容。这是因为这些内容并不存在"最后修改时间"的属性。</p>
</div>
<div class="top"><a href="mod_expires.html#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="ExpiresActive" id="ExpiresActive">ExpiresActive</a> <a name="expiresactive" id="expiresactive">指令</a></h2>
<table border="1" cellpadding="0" cellspacing="0" bordercolor="#AAAAAA" class="directive">
<tr><th><a href="directive-dict.html#Description">说明</a></th><td>启用或禁用产生"<code>Expires:</code>"和"<code>Cache-Control:</code>"头的功能</td></tr>
<tr><th><a href="directive-dict.html#Syntax">语法</a></th><td><code>ExpiresActive On|Off</code></td></tr>
<tr><th><a href="directive-dict.html#Context">作用域</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
<tr><th><a href="directive-dict.html#Override">覆盖项</a></th><td>Indexes</td></tr>
<tr><th><a href="directive-dict.html#Status">状态</a></th><td>扩展(E)</td></tr>
<tr><th><a href="directive-dict.html#Module">模块</a></th><td>mod_expires</td></tr>
</table>
    <p>这个指令对其作用范围内的文档启用或禁用产生<code>Expires</code>和<code>Cache-Control</code>头的功能。若设置为 <code>Off</code> 则不会为其作用范围内的任何文档生成<code>Expires</code>和<code>Cache-Control</code>头(除非被更低一层的规则改写，比如<code>.htaccess</code>文件)。若设置为 <code>On</code> 则会按照<code class="directive"><a href="mod_expires.html#expiresbytype">ExpiresByType</a></code>和<code class="directive"><a href="mod_expires.html#expiresdefault">ExpiresDefault</a></code>指令定义的标准为其作用范围内的文档生成<code>Expires</code>和<code>Cache-Control</code>头。</p>

    <p>注意，这个指令并不保证<code>Expires</code>或<code>Cache-Control</code>头一定会产生。如果定义的标准不规范，将不会产生这两个头，其效果是好像从未设置过这个指令一样。</p>

</div>
<div class="top"><a href="mod_expires.html#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="ExpiresByType" id="ExpiresByType">ExpiresByType</a> <a name="expiresbytype" id="expiresbytype">指令</a></h2>
<table border="1" cellpadding="0" cellspacing="0" bordercolor="#AAAAAA" class="directive">
<tr><th><a href="directive-dict.html#Description">说明</a></th><td>由MIME类型配置的<code>Expires</code>头的值</td></tr>
<tr><th><a href="directive-dict.html#Syntax">语法</a></th><td><code>ExpiresByType <var>MIME-type</var> <var>&lt;code&gt;seconds</var></code></td></tr>
<tr><th><a href="directive-dict.html#Context">作用域</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
<tr><th><a href="directive-dict.html#Override">覆盖项</a></th><td>Indexes</td></tr>
<tr><th><a href="directive-dict.html#Status">状态</a></th><td>扩展(E)</td></tr>
<tr><th><a href="directive-dict.html#Module">模块</a></th><td>mod_expires</td></tr>
</table>
    <p>这个指令定义了为指定MIME类型的文档(如<code>text/html</code>)生成的<code>Expires</code>头的值和<code>Cache-Control</code>头的<code>max-age</code>指令。<var>seconds</var>参数设置了添加到基准时间以构造有效期限的秒数。<code>Cache-Control: max-age</code>的计算方法是从有效期减去当前请求时间并转化为秒数。</p>

    <p>基准时刻可以是源文件的最后修改时刻或者客户端对源文件的访问时刻，至于使用那一个则由<code><var>&lt;code&gt;</var></code>指定。"<code>M</code>"表示源文件的最后修改时刻，"<code>A</code>"表示客户端对源文件的访问时刻。需要注意的是<code><var>&lt;code&gt;</var></code>和<code><var>seconds</var></code>之间没有空格。</p>

    <p>这两种基准的差别是很微妙的。如果使用"<code>M</code>"，所有当前缓存中的文档副本都将在同一时刻过期，这个可能对定期更新的URL(比如位于同一位置的每周通告)很有好处。如果使用"<code>A</code>"，则每个客户端所得到的有效期是不一样的，这个可能对那些几乎不更新的图片文件很有好处，特别是对于一组都引用了相同图片的相关文档。</p>

    <div class="example"><h3>示例：</h3><p><code>
      # 启用有效期控制<br />
      ExpiresActive On<br />
      # GIF有效期为1个月<br />
      ExpiresByType image/gif A2592000<br />
      # HTML文档的有效期是最后修改时刻后的一星期<br />
      ExpiresByType text/html M604800
    </code></p></div>

    <p>注意，这个指令只有在"<code>ExpiresActive On</code>"的条件下才有效。它<em>只</em>对指定的MIME类型文档改写由<code class="directive"><a href="mod_expires.html#expiresdefault">ExpiresDefault</a></code>指令设置的有效期。</p>

    <p>你也可以使用前面讲述的<a href="mod_expires.html#AltSyn">alternate syntax</a>指定有效期的计算方法。</p>

</div>
<div class="top"><a href="mod_expires.html#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="ExpiresDefault" id="ExpiresDefault">ExpiresDefault</a> <a name="expiresdefault" id="expiresdefault">指令</a></h2>
<table border="1" cellpadding="0" cellspacing="0" bordercolor="#AAAAAA" class="directive">
<tr><th><a href="directive-dict.html#Description">说明</a></th><td>默认有效期的计算方法</td></tr>
<tr><th><a href="directive-dict.html#Syntax">语法</a></th><td><code>ExpiresDefault <var>&lt;code&gt;seconds</var></code></td></tr>
<tr><th><a href="directive-dict.html#Context">作用域</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
<tr><th><a href="directive-dict.html#Override">覆盖项</a></th><td>Indexes</td></tr>
<tr><th><a href="directive-dict.html#Status">状态</a></th><td>扩展(E)</td></tr>
<tr><th><a href="directive-dict.html#Module">模块</a></th><td>mod_expires</td></tr>
</table>
    <p>该指令设置了其作用范围内的所有文档的默认有效期的计算方法，它可以被<code class="directive"><a href="mod_expires.html#expiresbytype">ExpiresByType</a></code>指令基于MIME类型被改写。详情请参见<code class="directive"><a href="mod_expires.html#expiresbytype">ExpiresByType</a></code>指令和那个<a href="mod_expires.html#AltSyn">alternate syntax</a>的描述。</p>

</div>
</div>
<div id="footer">
<p class="apache">本文允许自由的转载、引用、再分发，但必须保留译者署名并注明出处；详见：<a href="../translator_announcement.html#announcement">版权声明</a>。</p>
<p class="menu"><a href="index.html">模块索引</a> | <a href="directives.html">指令索引</a> | <a href="../faq/index.html">常见问题</a> | <a href="../glossary.html">词汇表</a> | <a href="../sitemap.html">站点导航</a></p></div>
</body></html>
